#ifndef SOCKET_H_
#define SOCKET_H_

#include <string>
#include <stdint.h>
#include <jsoncpp/json.h>

class Socket {
private:
	int sockfd;
	explicit Socket(int sockfd);
	Socket& operator=(const Socket& socket);
	void convertir(uint32_t& tam);
    bool conected;
	void concatenarHmac(std::string& subStr, const std::string& clave);
	bool autenticarMsj(const std::string& msj, const std::string& clave);

public:
	Socket();
	int conectar(const std::string& ip, const int& puerto);
	int escuchar(const int &puerto);
	Socket* aceptar();
	int enviar(const Json::Value& json, const std::string& clave = "");
	int recibir(Json::Value& json, const std::string& clave = "");
	bool conectado();
	int shutDown(int how);
	virtual ~Socket();
};

#endif /* SOCKET_H_ */
